package com.crazydream.wechat.common.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 
 * @author zhouyun
 *
 */
public interface BaseDAO
{
	
	
    /**
     * 添加对象
     * @param <T>
     * @param t
     * @return
     */
    <T> T create(T t);

    /**
     * 修改对象
     */
    <T> T update(T t);

    /**
     * 删除对象
     * @param <T>
     * @param <PK>
     * @param type
     * @param id
     */
    <T, PK extends Serializable> void delete(Class<T> type, PK id);

    /**
     * 查询对象（根据主键）
     * @param <T>
     * @param <PK>
     * @param type
     * @param id
     * @return
     */
    <T, PK extends Serializable> T find(Class<T> type, PK id);
    
    /**
     * 查询记录数
     * @param queryName
     * @param params
     * @return
     */
    Integer findRowCount(String queryName, Map<String, Object> params);

    /**
     * 查询集合
     * @param <T>
     * @param queryName
     * @return
     */
    <T> List<T> findWithNamedQuery(String queryName);

    /**
     * 查询集合(根据带参数的sql)
     * @param <T>
     * @param queryName
     * @param params
     * @return
     */
    <T> List<T> findWithNamedQuery(String queryName, Map<String, Object> params);
       
    /**
     * 原生态SQL查询
     * @param <T>
     * @param queryName
     * @param params
     * @return
     */
    <T> List<T> findWithSQLQuery(String queryName, Map<String, Object> params);

    /**
     * 查询对象（根据sql）
     * @param <T>
     * @param queryName
     * @return
     */
    <T> T findUniqueWithNamedQuery(String queryName);

    /**
     * 查询对象（根据带参数的SQL）
     * @param <T>
     * @param queryName
     * @param params
     * @return
     */
    <T> T findUniqueWithNamedQuery(String queryName, Map<String, Object> params);
    
    /**
     * 查询对象集合
     * @param <T>
     * @param query
     * @param params
     * @return
     */
    <T> List<T> findList(String queryName, Map<String, Object> params);
}
